package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.approval.vo.ApproFlowListVO;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.*;
import org.jsola.hr.dto.excel.EmpInfoImportDTO;
import org.jsola.hr.entity.EmpInfoDO;
import org.jsola.hr.query.*;
import org.jsola.hr.vo.*;
import org.jsola.hr.vo.excel.ParseResultVO;
import org.jsola.user.dto.UpdateByPhoneDTO;
import org.jsola.user.vo.UserSettingVO;
import org.jsola.user.vo.UserVO;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 员工信息
 *
 * @author zhr
 */
@Api(tags = "hr-员工信息")
public interface IEmpInfoControllerAPI {

    /**
     * 查询所选员工 的最晚入职时间（如果最晚早于当前则返回当前时间）
     *
     * @param empListQuery 查询条件
     * @return 时间戳
     */
    @ApiOperation(value = "批量调薪和批量编辑工价规则")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empListQuery", dataType = "EmpListQuery", value = "查询条件", paramType = "body")
    })
    Result<Long> getEmpJoinDate(EmpListQuery empListQuery);

    /**
     * 批量调薪和批量编辑工价规则
     *
     * @param empInfoUpdateDTO 员工信息更新实体
     * @return 失败为0成功为1
     */
    @ApiOperation(value = "批量调薪和批量编辑工价规则")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoUpdateDTO", dataType = "EmpInfoUpdateDTO", value = "更新员工信息", paramType = "body")
    })
    Result<Integer> batchUpdateSalaryInfo(EmpInfoUpdateDTO empInfoUpdateDTO);

    /**
     * 新增员工信息
     *
     * @param empInfoAddDTO 员工信息新增实体
     * @return 员工信息展示对象
     */
    @ApiOperation(value = "新增员工信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoAddDTO", dataType = "EmpInfoAddDTO", value = "新增员工信息", paramType = "body")
    })
    Result<EmpInfoVO> save(EmpInfoAddDTO empInfoAddDTO);


    /**
     * 修改员工信息
     *
     * @param empInfoUpdateDTO 员工信息
     * @return 更新数量
     */
    @ApiOperation(value = "修改员工信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoUpdateDTO", dataType = "EmpInfoUpdateDTO", value = "修改员工信息", paramType = "body")
    })
    Result<Integer> update(EmpInfoUpdateDTO empInfoUpdateDTO);


    /**
     * 删除单个员工信息，彻底删除
     *
     * @param empInfoId 员工信息id
     * @return 删除数量
     */
    @ApiOperation(value = "删除单个员工信息，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoId", dataType = "String", value = "员工信息id", paramType = "path")
    })
    Result<Integer> delete(String empInfoId);


    /**
     * 批量删除员工信息，彻底删除
     *
     * @param empInfoIds 员工信息id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除员工信息，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoIds", dataType = "String[]", value = "员工信息id数组", paramType = "body", allowMultiple = true)
    })
    Result<Integer> deleteBatch(String[] empInfoIds);

    /**
     * 签署合同状态分页查询员工列表
     *
     * @param empListQuery  员工信息查询对象
     * @param signingStatus 合同签署状态
     * @return result
     */
    @ApiOperation(value = "是否签署合同分页查询员工列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empListQuery", dataType = "EmpListQuery", value = "员工信息查询对象", paramType = "query"),
            @ApiImplicitParam(name = "signingStatus", dataType = "Integer", value = "正式类型（1:已签署,0:未签署,2:全部）", paramType = "path")
    })
    Result<Page<EmpInfoContractVO>> pageEmpListBySigningStatus(EmpListQuery empListQuery, Integer signingStatus);

    /**
     * 粘贴选择：查询员工(薪资档案用)
     *
     * @param empInfoQuery 查询
     * @return result
     */
    @ApiOperation(value = "粘贴选择：查询员工(薪资档案用)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息查询参数", paramType = "query")
    })
    Result<EmpInfoPasteVO> selectEmpByCardAndSalaryType(EmpInfoQuery empInfoQuery);

    /**
     * 粘贴选择：查询员工(发起合同用)
     *
     * @param idCards   身份证号 数组
     * @param companyId 公司id
     * @return result
     */
    @ApiOperation(value = "粘贴选择：查询员工(发起合同用)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCards", dataType = "String[]", value = "身份证号数组", paramType = "body", allowMultiple = true),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<EmpInfoPasteVO> selectEmpInfoByIdCardsAddConUse(String[] idCards, String companyId);


    /**
     * 根据员工信息id查询员工信息详情
     *
     * @param empInfoId 员工信息id
     * @return 员工信息详情
     */
    @ApiOperation(value = "根据员工信息id查询员工信息详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoId", dataType = "String", value = "员工信息id", paramType = "path"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "query")
    })
    Result<EmpInfoVO> findById(String empInfoId, String companyId);


    /**
     * 查询员工信息
     *
     * @param empInfoQuery 员工信息查询参数
     * @return page
     */
    @ApiOperation(value = "查询员工信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息查询参数", paramType = "query")
    })
    Result<List<EmpInfoListVO>> listAll(EmpInfoQuery empInfoQuery);


    /**
     * 分页查询员工信息
     *
     * @param empInfoQuery 员工信息查询参数
     * @return page
     */
    @ApiOperation(value = "分页查询员工信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息查询参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> page(EmpInfoQuery empInfoQuery);

    /**
     * 查询员工各状态数量
     *
     * @return 员工数量统计
     */
    @ApiOperation(value = "查询员工各状态数量")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司ID", paramType = "path")
    })
    Result<EmpInfoCountVO> getEmpInfoCount(String companyId);

    /**
     * 获取某公司入职可用的的所有审批流程
     *
     * @param companyId 公司id
     * @return 入职可用的的所有审批流程
     */
    @ApiOperation(value = "获取某公司入职可用的的所有审批流程")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<List<ApproFlowListVO>> listOnJobCanUseFlowsByCompany(String companyId);

    /**
     * 获取某公司离职可用的的所有审批流程
     *
     * @param companyId 公司id
     * @return 离职可用的的所有审批流程
     */
    @ApiOperation(value = "获取某公司离职可用的的所有审批流程")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<List<ApproFlowListVO>> listLeavingCanUseFlowsByCompany(String companyId);

    /**
     * 获取某公司调岗可用的的所有审批流程
     *
     * @param companyId 公司id
     * @return 调岗可用的的所有审批流程
     */
    @ApiOperation(value = "获取某公司调岗可用的的所有审批流程")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<List<ApproFlowListVO>> listTransferDutyCanUseFlowsByCompany(String companyId);

    /**
     * 获取某公司转正可用的的所有审批流程
     *
     * @param companyId 公司id
     * @return 转正可用的的所有审批流程
     */
    @ApiOperation(value = "获取某公司转正可用的的所有审批流程")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<List<ApproFlowListVO>> listTurnStraightCanUseFlowsByCompany(String companyId);

    /**
     * 获取某公司报销可用的的所有审批流程
     *
     * @param companyId 公司id
     * @return 报销可用的的所有审批流程
     */
    @ApiOperation(value = "获取某公司报销可用的的所有审批流程")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<List<ApproFlowListVO>> listReimbursementCanUseFlowsByCompany(String companyId);

    /**
     * 获取某公司请假可用的的所有审批流程
     *
     * @param companyId 公司id
     * @return 请假可用的的所有审批流程
     */
    @ApiOperation(value = "获取某公司请假可用的的所有审批流程")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<List<ApproFlowListVO>> listLeaveCanUseFlowsByCompany(String companyId);

    /**
     * 办理入职
     *
     * @param empInfoOnJobDTO 添加入职员工信息DTO
     * @return 员工信息展示对象
     */
    @ApiOperation(value = "办理入职")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoOnJobDTO", dataType = "EmpInfoOnJobDTO", value = "添加入职员工信息DTO", paramType = "body")
    })
    Result<String> saveEmpInfoPre(@Valid @RequestBody EmpInfoOnJobDTO empInfoOnJobDTO);

    /**
     * 确认到岗（入职）
     *
     * @param empInfoUpdateDTO 修改员工信息DTO
     * @return 修改条数
     */
    @ApiOperation(value = "确认到岗")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoUpdateDTO", dataType = "EmpInfoUpdateDTO", value = "修改员工信息DTO", paramType = "body")
    })
    Result<String> confirmToJoin(@Valid @RequestBody EmpInfoUpdateDTO empInfoUpdateDTO);

    /**
     * 批量确认到岗（入职）
     *
     * @param empInfoUpdateDTOList 修改员工信息DTO集合
     * @return 修改条数
     */
    @ApiOperation(value = "批量确认到岗")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoUpdateDTOList", dataType = "List<EmpInfoUpdateDTO>", value = "修改员工信息DTO", paramType = "body")
    })
    Result<Integer> batchConfirmToJoin(@Valid @RequestBody List<EmpInfoUpdateDTO> empInfoUpdateDTOList);

    /**
     * 批量未到岗
     *
     * @param empIds 员工id
     * @return 修改条数
     */
    @ApiOperation(value = "批量未到岗")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empIds", dataType = "String[]", value = "员工id", paramType = "body")
    })
    Result<Integer> batchNoArrival(String[] empIds);

    /**
     * 重新入职
     *
     * @param updateDTO 重新入职对象
     * @return 修改条数
     */
    @ApiOperation(value = "重新入职")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "updateDTO", dataType = "EmpOnJobUpdateDTO", value = "重新入职对象", paramType = "body"),
    })
    Result<Integer> onJobAgain(EmpOnJobUpdateDTO updateDTO);

    /**
     * 添加员工信息相关
     *
     * @param empAllInfoDTO 员工信息相关实体
     * @return 员工信息展示对象
     */
    @ApiOperation(value = "添加员工信息相关")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empAllInfoDTO", dataType = "EmpAllInfoAddDTO", value = "添加员工信息相关", paramType = "body")
    })
    Result<Boolean> saveEmpInfoRelation(@Valid @RequestBody EmpAllInfoAddDTO empAllInfoDTO);

    /**
     * 小程序添加员工
     *
     * @param empAllInfoDTO 员工信息相关实体
     * @return 员工信息展示对象
     */
    @ApiOperation(value = "小程序添加员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empAllInfoDTO", dataType = "EmpAllInfoAddDTO", value = "添加员工信息相关", paramType = "body")
    })
    Result<Boolean> saveEmpInfoRelationForMini(@Valid @RequestBody EmpAllInfoAddDTO empAllInfoDTO);

    /**
     * 小程序添加外包员工
     *
     * @param empInfoAndRuleAddDTO 员工信息相关实体
     * @return 员工信息展示对象
     */
    @ApiOperation(value = "小程序添加外包员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoAndRuleAddDTO", dataType = "EmpInfoAndRuleAddDTO", value = "添加员工信息相关", paramType = "body")
    })
    Result<Boolean> saveEmpInfoAndRuleForMini(@Valid @RequestBody EmpInfoAndRuleAddDTO empInfoAndRuleAddDTO);

    /**
     * 添加员工信息相关（外包类型使用）
     *
     * @param empInfoAndRuleAddDTO 员工所有信息(包含薪资、劳务费规则)
     */
    @ApiOperation(value = "添加员工信息相关（外包类型使用）")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoAndRuleAddDTO", dataType = "EmpInfoAndRuleAddDTO", value = "员工所有信息(包含薪资、劳务费规则)", paramType = "body")
    })
    Result<EmpInfoVO> saveEmpInfoAndRule(EmpInfoAndRuleAddDTO empInfoAndRuleAddDTO);

    /**
     * 修改员工信息相关
     *
     * @param empAllInfoDTO 员工信息相关实体
     * @return 员工信息展示对象
     */
    @ApiOperation(value = "修改员工信息相关")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empAllInfoDTO", dataType = "EmpAllInfoDTO", value = "修改员工信息相关", paramType = "body")
    })
    Result<Integer> updateEmpAllInfo(@Valid @RequestBody EmpAllInfoDTO empAllInfoDTO);

    /**
     * 查询员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询员工相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectEmpInfoPageRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 查询全部员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "分页查询全部在职员工相关信息(确认到岗且没确认离职的)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageEmpInfoALLRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 获取在职员工(在职和待离职) 的Id姓名和手机号
     *
     * @param companyId      公司Id
     * @param empNameOrPhone 姓名或手机号
     * @param pageNo         页码
     * @param pageSize       页面大小
     * @return 员工Id姓名和手机号
     */
    @ApiOperation(value = "分页查询全部在职员工相关信息(确认到岗且没确认离职的)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司Id", paramType = "query"),
            @ApiImplicitParam(name = "empNameOrPhone", dataType = "String", value = "姓名或手机号", paramType = "query"),
            @ApiImplicitParam(name = "pageNo", dataType = "Integer", value = "页码", paramType = "query"),
            @ApiImplicitParam(name = "pageSize", dataType = "Integer", value = "页面大小", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectIdNamePhoneOnJobEmpList(String companyId, String empNameOrPhone
            , Integer pageNo, Integer pageSize);

    /**
     * 查询全部员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询全部在职员工相关信息(确认到岗且没确认离职的)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<List<EmpInfoListVO>> listOnJobRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 查询全部员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询全部在职员工相关信息(确认离职的)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<List<EmpInfoListVO>> listLeaveRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 查询待入职员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询待入职员工相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectEmpInfoPendingRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 查询在职员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询在职员工(在职并且已转正的,不包含待离职的)相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectEmpInfoOnJobRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 粘贴选择在职
     *
     * @param idCardList 身份证号
     * @param companyId  用工单位id
     * @return 员工列表
     */
    @ApiOperation(value = "粘贴选择在职")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCardList", dataType = "List<String>", value = "身份证号数组", paramType = "body"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "用工单位id", paramType = "body")
    })
    Result<CheckInEmpInfoListVO> listPasteOnJob(List<String> idCardList, String companyId);

    /**
     * 待入职高级筛选
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "待入职高级筛选")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageWaitJobAdvanced(EmpInfoQuery empInfoQuery);

    /**
     * 批量删除已离职员工高级筛选
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "批量删除已离职员工高级筛选")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageResignedList(EmpInfoQuery empInfoQuery);

    /**
     * 粘贴选择待入职
     *
     * @param idCardList 身份证号
     * @param companyId  用工单位id
     * @return 员工列表
     */
    @ApiOperation(value = "粘贴选择待入职")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCardList", dataType = "List<String>", value = "身份证号", paramType = "body"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "用工单位id", paramType = "path")
    })
    Result<CheckInEmpInfoListVO> listPasteWaitJob(List<String> idCardList, String companyId);

    /**
     * 粘贴选择：查询员工(查询在职员工相关信息)
     *
     * @param idCards   身份证号 数组
     * @param companyId 公司id
     * @return result
     */
    @ApiOperation(value = "粘贴选择：查询员工(查询在职员工相关信息)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCards", dataType = "String[]", value = "身份证号数组", paramType = "body", allowMultiple = true),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<EmpInfoPasteVO> selectEmpInfoOnJobRelation(String[] idCards, String companyId);


    /**
     * 查询待转正员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询待转正员工(在职未转正的,不包含待离职的)相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectEmpInfoToFormalRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 待转正可以批量离职分页(在职未转正的,不包含待离职的)相关信息
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "待转正可以批量离职分页(在职未转正的,不包含待离职的)相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectForLeave(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 粘贴选择查询待转正员工
     *
     * @param idCardList 身份证号
     * @param companyId  用工单位id
     * @return 待转正员工
     */
    @ApiOperation(value = "粘贴选择查询待转正员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCardList", dataType = "List<String>", value = "身份证号", paramType = "body"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "用工单位id", paramType = "path")
    })
    Result<CheckInEmpInfoListVO> listPasteFormal(List<String> idCardList, String companyId);

    /**
     * 粘贴选择查询可以离职的待转正员工
     *
     * @param idCardList 身份证号
     * @param companyId  用工单位id
     * @return 待转正员工
     */
    @ApiOperation(value = "粘贴选择查询可以离职的待转正员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCardList", dataType = "List<String>", value = "身份证号", paramType = "body"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "用工单位id", paramType = "path")
    })
    Result<CheckInEmpInfoListVO> listPasteFormalForLeave(List<String> idCardList, String companyId);

    /**
     * 查询离职员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询离职员工(待离职和已离职的)相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectEmpInfoLeaveRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 粘贴选择已离职员工列表
     *
     * @param idCardList 身份证
     * @param companyId  用工单位id
     * @return 已离职员工列表
     */
    @ApiOperation(value = "粘贴选择已离职员工列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCardList", dataType = "List<String>", value = "身份证", paramType = "body"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "用工单位id", paramType = "path")
    })
    Result<CheckInEmpInfoListVO> listPasteResigned(List<String> idCardList, String companyId);

    /**
     * 粘贴选择待离职 （状态为待离职和审批通过）
     *
     * @param idCardList 身份证号
     * @param companyId  用工单位id
     * @return 待转正员工
     */
    @ApiOperation(value = "粘贴选择待离职 （状态为待离职和审批通过）")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCardList", dataType = "List<String>", value = "身份证号", paramType = "body"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "用工单位id", paramType = "path")
    })
    Result<CheckInEmpInfoListVO> listPasteWaitLeave(List<String> idCardList, String companyId);

    /**
     * 粘贴选择：查询员工(查询离职员工相关信息)
     *
     * @param idCards   身份证号 数组
     * @param companyId 公司id
     * @return result
     */
    @ApiOperation(value = "粘贴选择：查询员工(查询离职员工相关信息)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCards", dataType = "String[]", value = "身份证号数组", paramType = "body", allowMultiple = true),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<EmpInfoPasteVO> selectEmpInfoLeaveRelation(String[] idCards, String companyId);


    /**
     * 查询调岗员工相关信息分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询调岗员工(在职且在进行调岗的,不包含待离职的)相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectEmpInfoTransferRelation(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 粘贴选择待调岗员工（审批通过+ 待调岗）
     *
     * @param idCardList 身份证
     * @param companyId  用工单位id
     * @return list
     */
    @ApiOperation(value = "粘贴选择待调岗员工（审批通过+ 待调岗）")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "用工单位id", paramType = "path")
    })
    Result<CheckInEmpInfoListVO> listPasteTransferRelation(List<String> idCardList, String companyId);

    /**
     * 查询员工可申请离职列表分页
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询员工可申请离职列表分页")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectEmpInfoListForLeave(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 查询在职/待离职员工列表分页(花名册使用)
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询在职/待离职员工列表分页(花名册使用)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageOnJobEmpList(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 查询当前员工在列表中的位置
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工位置
     */
    @ApiOperation(value = "查询当前员工在列表中的位置")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<EmpInfoCurrentPositionVO> getEmpCurrentPosition(EmpInfoQuery empInfoQuery);


    /**
     * 查询在职待转正员工(有入职时间没有转正时间或转正时间未到期的)(花名册试用期)
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询在职待转正员工(有入职时间没有转正时间或转正时间未到期的)(花名册试用期)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageOnJobWaitFormal(EmpInfoQuery empInfoQuery);


    /**
     * 查询已转正员工(正式)
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询已转正员工(正式)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageHasFormal(@Valid EmpInfoQuery empInfoQuery);


    /**
     * 查询待离职员工
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询待离职员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageWaitLeave(@Valid EmpInfoQuery empInfoQuery);


    /**
     * 查询待离职员工
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询已离职员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageHasLeave(@Valid EmpInfoQuery empInfoQuery);


    /**
     * 查询待离职员工
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询已调岗员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageTransfer(@Valid EmpInfoQuery empInfoQuery);


    /**
     * 查询无类型的员工
     *
     * @param empInfoQuery 员工信息参数
     * @return 员工相关信息分页
     */
    @ApiOperation(value = "查询无类型的员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageNoFormalType(@Valid EmpInfoQuery empInfoQuery);

    /**
     * 员工注册为用户
     *
     * @param empInfoQuery 员工信息参数
     * @return 用户信息
     */
    @ApiOperation(value = "员工注册为用户")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "员工信息参数", paramType = "body")
    })
    Result<UserVO> empRegisterAccount(@Valid @RequestBody EmpInfoQuery empInfoQuery);

    /**
     * 查询员工相关信息
     *
     * @param empInfoId 员工信息id
     * @return 员工信息详情
     */
    @ApiOperation(value = "查询员工相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoId", dataType = "String", value = "员工信息id", paramType = "path"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "query")
    })
    Result<EmpAllInfoVO> findEmpInfoRelation(String empInfoId, String companyId);

    /**
     * 查询员工相关信息 统计页面专用 不校验 公司
     *
     * @param empInfoId 员工信息id
     * @return 员工信息详情
     */
    @ApiOperation(value = "查询员工相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoId", dataType = "String", value = "员工信息id", paramType = "path"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "query")
    })
    Result<EmpAllInfoVO> findEmpInfoRelationForStatisticsPage(String empInfoId, String companyId);


    /**
     * 查询员工岗位信息
     *
     * @param empInfoId 员工信息id
     * @return 员工信息详情
     */
    @ApiOperation(value = "查询员工岗位信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoId", dataType = "String", value = "员工信息id", paramType = "path"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "query")
    })
    Result<EmpInfoPositionVO> findEmpInfoPosition(String empInfoId, String companyId);


    /**
     * 给选中的待入职员工发送入职短信
     *
     * @param empInfoIds 员工信息id集合
     * @return 数量
     */
    @ApiOperation(value = "给选中的待入职员工发送入职短信")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoIds", dataType = "String[]", value = "员工信息id数组", paramType = "body", allowMultiple = true)
    })
    Result<Integer> sendEntrySmsByIds(String[] empInfoIds);


    /**
     * 给某个公司的全部待入职员工发送入职短信
     *
     * @param companyId 公司id
     * @return 数量
     */
    @ApiOperation(value = "给某个公司的全部待入职员工发送入职短信")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<Integer> sendEntrySmsByCompany(String companyId);

    /**
     * 员工信息导出excel
     *
     * @param empInfoExportQuery 导出动态参数
     * @return excel
     */
    @ApiOperation(value = "员工信息导出excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoExportQuery", dataType = "EmpInfoExportQuery", value = "导出动态参数", paramType = "body")
    })
    ResponseEntity<Resource> export(EmpInfoExportQuery empInfoExportQuery);

    /**
     * 解析excel
     *
     * @param file    上传的文件
     * @param success true返回成功的，false返回失败的，不传返回全部
     * @return 解析结果
     */
    @ApiOperation(value = "解析excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "file", value = "文件，Content-Type需要设置为multipart/form-data", paramType = "form"),
            @ApiImplicitParam(name = "success", dataType = "Boolean", value = "true返回成功的，false返回失败的，不传返回全部", paramType = "query")
    })
    Result<List<ParseResultVO<EmpInfoImportDTO>>> parseImportFile(MultipartFile file, Boolean success);

    /**
     * 导入excel
     *
     * @param file  上传的文件
     * @param force true忽略错误的行，false有错误中断上传
     * @return 导入成功数量
     */
    @ApiOperation(value = "导入excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "file",
                    value = "文件，Content-Type需要设置为multipart/form-data",
                    paramType = "form"),
            @ApiImplicitParam(name = "force", dataType = "Boolean", value = "true忽略错误的行，false有错误中断", paramType = "query")
    })
    Result<EmpImportExcelVO> importFile(MultipartFile file, Boolean force, String companyId);

    /**
     * 导入excel 批量添加
     *
     * @param file  上传的文件
     * @param force true忽略错误的行，false有错误中断上传
     * @return 导入成功数量
     */
    @ApiOperation(value = "导入excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "file",
                    value = "文件，Content-Type需要设置为multipart/form-data",
                    paramType = "form"),
            @ApiImplicitParam(name = "force", dataType = "Boolean", value = "true忽略错误的行，false有错误中断", paramType = "query")
    })
    Result<EmpImportExcelVO> importFileZhiXinRen(MultipartFile file, Boolean force, String companyId);

    /**
     * 导入excel 租户批量添加
     *
     * @param file  上传的文件
     * @param force true忽略错误的行，false有错误中断上传
     * @return 导入成功数量
     */
    @ApiOperation(value = "租户导入excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "file",
                    value = "文件，Content-Type需要设置为multipart/form-data",
                    paramType = "form"),
            @ApiImplicitParam(name = "force", dataType = "Boolean", value = "true忽略错误的行，false有错误中断", paramType = "query")
    })
    Result<EmpImportExcelVO> importZhiXinRenForSite(MultipartFile file, Boolean force);

    /**
     * 导入excel 批量修改
     *
     * @param file  上传的文件
     * @param force true忽略错误的行，false有错误中断上传
     * @return 导入成功数量
     */
    @ApiOperation(value = "导入excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "file",
                    value = "文件，Content-Type需要设置为multipart/form-data",
                    paramType = "form"),
            @ApiImplicitParam(name = "force", dataType = "Boolean", value = "true忽略错误的行，false有错误中断", paramType = "query")
    })
    Result<EmpImportExcelVO> importFileZhiXinRenForUpdate(MultipartFile file, Boolean force, String companyId);

    /**
     * 根据条件分页查询员工
     *
     * @param depAndInfoQuery 部门信息查询参数
     * @return Page<EmpInfoListVO>
     */
    @ApiOperation(value = "根据条件分页查询员工(新组织架构)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path"),
            @ApiImplicitParam(name = "depAndInfoQuery", dataType = "DepAndInfoQuery", value = "部门及员工信息查询参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageEmpInfoByDepAndEmpInfo(String companyId, DepAndInfoQuery depAndInfoQuery);

    /**
     * 按员工Id导出excel
     *
     * @param empIds    选择的员工Id
     * @param companyId 公司Id
     * @return 成功的条数
     */
    @ApiOperation(value = "按员工Id导出excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path"),
            @ApiImplicitParam(name = "empIds", dataType = "String", value = "员工Ids", paramType = "body")
    })
    ResponseEntity<Resource> exportByEmpIds(List<String> empIds, String companyId);

    /**
     * 查询员工相关合同信息
     *
     * @param empIdArray 员工ID集合
     * @return page
     */
    @ApiOperation(value = "查询员工相关合同信息,get请求,少于100人使用")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "templateId", dataType = "Long", value = "模板id", paramType = "query"),
            @ApiImplicitParam(name = "empIdArray", allowMultiple = true, dataType = "String", value = "员工id集合", paramType = "query")
    })
    Result<List<EmpInfoContractVO>> getEmpInfoListForContract(Long templateId, @Valid String... empIdArray);


    /**
     * 查询员工相关合同信息
     *
     * @param contractEmpInfoDTO 员工ID集合
     * @return page
     */
    @ApiOperation(value = "查询员工相关合同信息.post请求,多少人都可以用")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "contractEmpInfoDTO", dataType = "ContractEmpInfoDTO", value = "合同员工信息查询", paramType = "body")
    })
    Result<List<EmpInfoContractVO>> getContractEmpInfoList(ContractEmpInfoDTO contractEmpInfoDTO);


    /**
     * 查询某公司所有员工工作城市
     *
     * @param companyId 公司id
     * @return 某公司所有员工工作城市
     */
    @ApiOperation(value = "查询某公司所有员工工作城市")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<Map<String, String>> listEmpJoinCity(String companyId);

    /**
     * 发送修改员工手机号的短信验证码
     *
     * @param empPhone 员工旧手机号
     * @param newPhone 员工新手机号
     * @return 成功失败
     */
    @ApiOperation(value = "发送修改员工手机号的短信验证码(必须员工本人登录修改)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPhone", dataType = "String", value = "员工旧手机号", paramType = "path"),
            @ApiImplicitParam(name = "newPhone", dataType = "String", value = "员工新手机号", paramType = "path")
    })
    Result<String> sendChangePhoneMessage(String empPhone, String newPhone);

    /**
     * 修改员工手机号
     *
     * @param empPhone 员工旧手机号
     * @param newPhone 员工新手机号
     * @return 结果
     */
    @ApiOperation(value = "修改员工手机号(必须员工本人登录修改)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empPhone", dataType = "String", value = "员工旧手机号", paramType = "path"),
            @ApiImplicitParam(name = "newPhone", dataType = "String", value = "员工新手机号", paramType = "path"),
            @ApiImplicitParam(name = "captcha", dataType = "String", value = "新手机号收到的验证码", paramType = "path")
    })
    Result<String> updateEmpPhone(String empPhone, String newPhone, String captcha);

    /**
     * 筛选符合条件的员工(公司公告选人员使用)
     *
     * @param empInfoScreenDTO 筛选条件
     * @return 筛选符合条件的员工
     */
    @ApiOperation(value = "筛选符合条件的员工(公司公告选人员使用)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoScreenDTO", dataType = "EmpInfoScreenDTO", value = "筛选条件", paramType = "body")
    })
    Result<List<EmpInfoListVO>> screenEmp(EmpInfoScreenDTO empInfoScreenDTO);

    /**
     * 添加所有员工拼音
     *
     * @return 修改个数
     */
    @ApiOperation(value = "添加所有员工拼音")
    Result<Integer> piny();


    /**
     * 员工换公司
     *
     * @param empChangeCompanyDTO 用户信息
     * @return 员工换公司结果
     */
    @ApiOperation(value = "员工换公司")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empChangeCompanyDTO", dataType = "EmpChangeCompanyDTO", value = "用户信息", paramType = "body")
    })
    Result<String> empChangeCompanyId(EmpChangeCompanyDTO empChangeCompanyDTO);

    /**
     * 员工批量换公司
     *
     * @param empBatchChangeCompanyDTO 用户信息
     * @return 员工换公司结果
     */
    @ApiOperation(value = "员工批量换公司")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empBatchChangeCompanyDTO", dataType = "EmpBatchChangeCompanyDTO", value = "用户信息", paramType = "body")
    })
    Result<String> empBatchChangeCompanyId(EmpBatchChangeCompanyDTO empBatchChangeCompanyDTO);

    /**
     * 恢复在职
     *
     * @param companyId 公司Id
     * @param empId     员工Id
     * @return 恢复在职
     */
    @ApiOperation(value = "恢复在职")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司Id", paramType = "query"),
            @ApiImplicitParam(name = "empId", dataType = "String", value = "员工Id", paramType = "query")
    })
    Result<String> reinstatement(String companyId, String empId);

    /**
     * 批量恢复在职
     *
     * @param companyId 公司Id
     * @param empIds    员工Id
     * @return 恢复在职数量
     */
    @ApiOperation(value = "批量恢复在职")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司Id", paramType = "path"),
            @ApiImplicitParam(name = "empIds", dataType = "String[]", value = "员工Id", paramType = "body", allowMultiple = true)
    })
    Result<Integer> batchReinstatement(String companyId, String[] empIds);

    /**
     * 查询可以恢复在职的员工
     *
     * @param empInfoQuery 查询参数
     * @return 员工信息
     */
    @ApiOperation(value = "查询可以恢复在职的员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "查询参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> pageReinstatementEmp(EmpInfoQuery empInfoQuery);

    /**
     * 粘贴选择可以恢复在职的员工
     *
     * @param idCardList 身份证号列表
     * @param companyId  用工单位id
     * @return 可以恢复在职的员工
     */
    @ApiOperation(value = "粘贴选择可以恢复在职的员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCardList", dataType = "List<String>", value = "身份证号列表", paramType = "body"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "用工单位id", paramType = "path")
    })
    Result<CheckInEmpInfoListVO> listPasteReinstatementEmp(List<String> idCardList, String companyId);

    /**
     * 补收补缴查询员工
     *
     * @param empSocPageQuery 查询参数
     * @return 员工信息
     */
    @ApiOperation(value = "补收补缴查询员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocPageQuery", dataType = "EmpSocPageQuery", value = "查询参数", paramType = "query")
    })
    Result<Page<EmpInfoDO>> pageByFill(EmpSocPageQuery empSocPageQuery);

    /**
     * 增员查询员工
     *
     * @param empSocPageQuery 查询参数
     * @return 员工信息
     */
    @ApiOperation(value = "增员查询员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocPageQuery", dataType = "EmpSocPageQuery", value = "查询参数", paramType = "query")
    })
    Result<Page<EmpInfoDO>> increaseSiftEmp(EmpSocPageQuery empSocPageQuery);

    /**
     * 增员查询员工统计信息
     *
     * @param companyId 公司id
     * @return 员工信息
     */
    @ApiOperation(value = "增员查询员工统计信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司Id", paramType = "path")
    })
    Result<List<SiftEmpCountVO>> increaseSiftEmpCount(String companyId);

    /**
     * 减员查询员工
     *
     * @param empSocPageQuery 查询参数
     * @return 员工信息
     */
    @ApiOperation(value = "减员查询员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocPageQuery", dataType = "EmpSocPageQuery", value = "查询参数", paramType = "query")
    })
    Result<Page<EmpInfoDO>> decreaseSiftEmp(EmpSocPageQuery empSocPageQuery);

    /**
     * 减员查询员工统计信息
     *
     * @param companyId 公司id
     * @return 员工信息
     */
    @ApiOperation(value = "减员查询员工统计信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司Id", paramType = "path")
    })
    Result<List<SiftEmpCountVO>> decreaseSiftEmpCount(String companyId);

    /**
     * 粘贴选择：查询员工(增员计划用)
     *
     * @param idCards   身份证号 数组
     * @param companyId 公司id
     * @return result
     */
    @ApiOperation(value = "粘贴选择：查询员工(增员计划用)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCards", dataType = "String[]", value = "身份证号数组", paramType = "body", allowMultiple = true),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<EmpInfoPasteVO> selectEmpGroupByIdCards(String[] idCards, String companyId);

    /**
     * 粘贴选择：查询员工(减员计划用)
     *
     * @param companyId 公司id
     * @param idCards   身份证号 数组
     * @return result
     */
    @ApiOperation(value = "粘贴选择：查询员工(减员计划用)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCards", dataType = "String[]", value = "身份证号数组", paramType = "body", allowMultiple = true),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<EmpInfoPasteVO> selectEmpGroupByIdCards2(String[] idCards, String companyId);


    /**
     * 根据员工Id列表查询员工的社保简略信息
     *
     * @param empSocTransformQuery 减员参数
     * @return 员工社保简略信息
     */
    @ApiOperation(value = "根据员工Id列表查询员工的社保简略信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocTransformQuery", dataType = "EmpSocTransformQuery", value = "减员参数", paramType = "body")
    })
    Result<Page<EmpSocDetailsVO>> selectEmpSocByEmpIdList(EmpSocTransformQuery empSocTransformQuery);

    /**
     * 社保差额费用筛选员工(包括高级筛选)
     *
     * @param empSocPageQuery 查询参数
     * @return 员工
     */
    @ApiOperation(value = "社保差额费用筛选员工(包括高级筛选)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocPageQuery", dataType = "EmpSocPageQuery", value = "参数", paramType = "query")
    })
    Result<Page<EmpInfoDO>> selectDifferenceEmp(EmpSocPageQuery empSocPageQuery);

    /**
     * 社保差额费用粘贴身份证号筛选员工
     *
     * @param idCards   身份证号
     * @param companyId 公司Id
     * @return 筛选结果
     */
    @ApiOperation(value = "社保差额费用粘贴身份证号筛选员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path"),
            @ApiImplicitParam(name = "idCards", dataType = "array", value = "身份证号", paramType = "query")
    })
    Result<EmpInfoPasteVO> pasteIdCardSelect(String companyId, String[] idCards);

    /**
     * 查询工作性质分类的员工列表
     *
     * @param companyId  公司id
     * @param formalType 正式类型（1:试用期,2:已转正,0:无状态）
     * @return result
     */
    @ApiOperation(value = "查询工作性质分类的员工列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "query"),
            @ApiImplicitParam(name = "formalType", dataType = "Integer", value = "正式类型（1:试用期,2:已转正,0:无状态）", paramType = "query")
    })
    Result<List<EmpPostTypeListVO>> selectEmpListByPostType(String companyId, Integer formalType);

    /**
     * 分页查询员工列表
     *
     * @param empListQuery 员工信息查询对象
     * @return result
     */
    @ApiOperation(value = "分页查询员工列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empListQuery", dataType = "EmpListQuery", value = "员工信息查询对象", paramType = "query")
    })
    Result<Page<EmpInfoVO>> pageEmpList(EmpListQuery empListQuery);

    /**
     * 查询员工列表（粘贴选择）
     *
     * @param companyId 公司id
     * @param idCards   身份证号 数组
     * @return result
     */
    @ApiOperation(value = "查询员工列表（粘贴选择）")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCards", dataType = "String[]", value = "身份证号数组", paramType = "body", allowMultiple = true),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<EmpInfoPasteVO> empListByIdCards(String[] idCards, String companyId);


    /**
     * 搜索员工姓名\手机号\身份证号
     *
     * @param phoneNameIdCard 员工姓名\手机号\身份证号
     * @return 前10条
     */
    @ApiOperation(value = "搜索员工姓名\\手机号\\身份证号")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "phoneNameIdCard", dataType = "String", value = "员工姓名\\手机号\\身份证号", paramType = "query")
    })
    Result<List<EmpInfoVO>> selectByPhoneNameIdCard(String phoneNameIdCard);

    /**
     * 分页搜索员工姓名\手机号\身份证号
     *
     * @param phoneNameIdCard 分页员工姓名\手机号\身份证号
     * @return 前10条
     */
    @ApiOperation(value = "分页搜索员工姓名\\手机号\\身份证号")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "phoneNameIdCard", dataType = "String", value = "员工姓名\\手机号\\身份证号", paramType = "query")
    })
    Result<Page<EmpInfoVO>> selectPageByPhoneNameIdCard(String phoneNameIdCard, int pageNo, int pageSize);

    /**
     * 修改员工工价规则,招工劳务费规则
     *
     * @param salaryRuleDTO 修改员工工价规则,招工劳务费规则
     * @return 前10条
     */
    @ApiOperation(value = "修改员工工价规则,招工劳务费规则")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "salaryRuleDTO", dataType = "SalaryRuleDTO", value = "修改员工工价规则,招工劳务费规则", paramType = "body")
    })
    Result<Integer> updateSalaryRule(SalaryRuleDTO salaryRuleDTO);


    @ApiOperation(value = "获取指定用户信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId", dataType = "String", value = "用户Id", paramType = "query")
    })
    Result<UserSettingVO> selectUserInfoById(String userId);


    @ApiOperation(value = "解除指定用户微信绑定")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "unbindWechatDTO", value = "用户Id", dataType = "UnbindWechatDTO", paramType = "body")
    })
    Result<String> unbindWechatByUserId(UnbindWechatDTO unbindWechatDTO);


    @ApiOperation(value = "当前登录用户根据凭证修改手机号")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "updateByPhoneDTO", dataType = "UpdateByPhoneDTO", value = "修改对象", paramType = "body"),
    })
    Result<String> updatePhone(UpdateByPhoneDTO updateByPhoneDTO);


    /**
     * 小程序人员统计
     *
     * @param empCountQuery 查询对象
     * @return 统计对象
     */
    @ApiOperation(value = "小程序人员统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empCountQuery", dataType = "EmpCountQuery", value = "查询对象", paramType = "body")
    })
    Result<EmpCountVO> empCount(EmpCountQuery empCountQuery);

    /**
     * 小程序人员分页
     *
     * @param empCountQuery 查询对象
     * @return 分页对象
     */
    @ApiOperation(value = "小程序人员分页")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empCountQuery", dataType = "EmpCountQuery", value = "查询对象", paramType = "body")
    })
    Result<Page<EmpInfoVO>> pageEmpListForMini(EmpCountQuery empCountQuery);

    /**
     * 小程序我的员工-详情
     *
     * @param empId 员工id
     * @return 员工详情
     */
    @ApiOperation(value = "小程序我的员工-详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empId", dataType = "String", value = "员工id", paramType = "query")
    })
    Result<MyEmpInfoVO> selectByEmpId(String empId);

    /**
     * 查询在职及当月离职的员工
     *
     * @param companyId   公司Id
     * @param nameOrPhone 姓名或手机号
     * @param yearly      年
     * @param monthly     月
     * @param pageNo      页码
     * @param pageSize    ，每页条数
     * @return 在职及当月离职的员工
     */
    @ApiOperation(value = "小程序我的员工-详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司Id", paramType = "query"),
            @ApiImplicitParam(name = "nameOrPhone", dataType = "String", value = "姓名或手机号", paramType = "query"),
            @ApiImplicitParam(name = "yearly", dataType = "int", value = "年", paramType = "query"),
            @ApiImplicitParam(name = "monthly", dataType = "int", value = "月", paramType = "query"),
            @ApiImplicitParam(name = "pageNo", dataType = "int", value = "分页参数，第几页", paramType = "query"),
            @ApiImplicitParam(name = "pageSize", dataType = "int", value = "分页参数，每页的条数", paramType = "query")
    })
    Result<Page<EmpInfoVO>> selectCurrentMonthByCompanyId(String companyId, String nameOrPhone, int yearly, int monthly, int pageNo, int pageSize);

    /**
     * 查询薪资档案
     *
     * @param empInfoQuery 查询对象
     * @return 员工信息
     */
    @ApiOperation(value = "查询薪资档案")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "查询对象", paramType = "query")
    })
    Result<Page<EmpInfoVO>> pageNoFixSalaryFile(EmpInfoQuery empInfoQuery);

    /**
     * 粘贴选择：查询员工(查询薪资档案用)
     *
     * @param companyId 公司id
     * @param idCards   身份证号 数组
     * @return result
     */
    @ApiOperation(value = "粘贴选择：查询员工(查询薪资档案用)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCards", dataType = "String[]", value = "身份证号数组", paramType = "body", allowMultiple = true),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<EmpInfoPasteVO> selectNoFixSalaryFileGroupByIdCards(String[] idCards, String companyId);

    /**
     * 根据员工手机号/身份证号 查询站点下已存在员工
     *
     * @param companyId 公司Id
     * @param phone     电话
     * @param idCard    身份证
     * @return 已离职员工
     */
    @ApiOperation(value = "根据员工手机号/身份证号 查询站点下已存在员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司Id", paramType = "query"),
            @ApiImplicitParam(name = "phone", dataType = "String", value = "手机号", paramType = "query"),
            @ApiImplicitParam(name = "idCard", dataType = "String", value = "身份证号", paramType = "query")
    })
    Result<EmpInfoCheckVO> selectResignedByPhoneAndIdCard(String companyId, String phone, String idCard);

    /**
     * 根据员工类型分页查询员工
     *
     * @param empInfoQuery 查询参数
     * @return 员工
     */
    @ApiOperation(value = "根据员工类型分页查询员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "查询参数", paramType = "query")
    })
    Result<Page<EmpInfoDO>> selectPageByPostType(EmpInfoQuery empInfoQuery);

    /**
     * 分页查询用工单位下所有符合条件的员工信息
     *
     * @param empInfoQuery 查询条件
     * @return 用工单位下所有符合条件的员工信息
     */
    @ApiOperation(value = "分页查询用工单位下所有符合条件的员工信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoQuery", dataType = "EmpInfoQuery", value = "查询参数", paramType = "query")
    })
    Result<Page<EmpInfoListVO>> selectAllByEmpInfoQuery(EmpInfoQuery empInfoQuery);

    /**
     * 查询用工单位下所有身份证号符合的员工信息
     *
     * @param checkInEmpInfoQuery 查询条件
     * @return 用工单位下所有符合条件的员工信息
     */
    @ApiOperation(value = "查询用工单位下所有身份证号符合的员工信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "checkInEmpInfoQuery", dataType = "CheckInEmpInfoQuery", value = "查询条件", paramType = "body")
    })
    Result<CheckInEmpInfoListVO> selectAllByCompanyIdAndIdCard(CheckInEmpInfoQuery checkInEmpInfoQuery);

    /**
     * 查找员工（花名册、预登记）信息（必填+自定义）
     *
     * @param queryType 查询方式(1:预登记，2员工表（花名册）)
     * @param empId     员工Id
     * @return 员工信息
     */
    @ApiOperation(value = "查找员工")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "queryType", dataType = "Integer", value = "查询方式", paramType = "query"),
            @ApiImplicitParam(name = "empId", dataType = "String", value = "员工Id", paramType = "query"),
            @ApiImplicitParam(name = "onboardingCompanyId", dataType = "String", value = "入职用工单位ID", paramType = "query"),
    })
    Result<List<EmpFieldDTO>> getEmpFieldList(Integer queryType, String empId, String onboardingCompanyId);
}

